package visiopuce.service;

import java.util.Date;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import visiopuce.ApplicationContexte;
import visiopuce.HibernateUtil;
import visiopuce.DAO.FamilleDAO;
import visiopuce.DAO.FamilleDAOImpl;
import visiopuce.DAO.HistoriqueDAO;
import visiopuce.DAO.HistoriqueDAOImpl;
import visiopuce.objets.Alteration;
import visiopuce.objets.Famille;
import visiopuce.objets.Historique;

public class FamilleServiceImpl implements FamilleService {

	private static final Log log = LogFactory.getLog(HistoriqueService.class);

	private FamilleDAO familleDAO = FamilleDAOImpl.getInstance();
	private HistoriqueDAO historiqueDAO = HistoriqueDAOImpl.getInstance();

	/** Constructeur priv� */
	private FamilleServiceImpl() {
	}

	/** Instance unique non pr�initialis�e */
	private static FamilleServiceImpl INSTANCE = null;

	/** Point d'acc�s pour l'instance unique du singleton */
	public static FamilleService getInstance() {
		if (INSTANCE == null) {
			INSTANCE = new FamilleServiceImpl();
		}
		return INSTANCE;
	}

	public void save(Famille f) {
		HibernateUtil.beginTransaction();
		try {
			familleDAO.save(f);

			Historique h2 = new Historique();
			h2.setDate(new Date());
			h2.setRequete("Enregistrement " + f.toString());
			h2.setUtilisateur(ApplicationContexte.getInstance().getUtilisateur());
			historiqueDAO.save(h2);
			HibernateUtil.commitTransaction();
		} catch (Exception ex) {
			ex.printStackTrace();
			HibernateUtil.rollbackTransaction();
		} finally {
			HibernateUtil.closeSession();
		}
	}

	@Override
	public List<Famille> getFamille(Integer idPersonne) {
		List<Famille> familles = null;

		HibernateUtil.beginTransaction();
		familles = familleDAO.getFamille(idPersonne);
		HibernateUtil.commitTransaction();
		HibernateUtil.closeSession();
		return familles;
	}

	@Override
	public Integer getIdFamille(Integer idPersonne) {
		Integer famille = null;

		HibernateUtil.beginTransaction();
		famille = familleDAO.getIdFamille(idPersonne);
		HibernateUtil.commitTransaction();
		HibernateUtil.closeSession();
		return famille;
	}

	@Override
	public Famille getIndividu(Integer idPersonne) {
		Famille famille = null;

		HibernateUtil.beginTransaction();
		famille = familleDAO.getIndividu(idPersonne);
		HibernateUtil.commitTransaction();
		HibernateUtil.closeSession();
		return famille;
	}

}